let _ = if b then e else ( e1 ; e2 )

let _ =
  if b then e
  else (
    something loooooooooooooooooooooooooooooooong enough to_trigger a break ;
    this is more )

let _ =
  if b then ( e1 ; e2 )
  else (
    something loooooooooooooooooooooooooooooooong enough to_trigger a break ;
    this is more )

let _ =
  if b then (
    something loooooooooooooooooooooooooooooooong enough to_trigger a break ;
    this is more )
  else if b1 then (
    something loooooooooooooooooooooooooooooooong enough to_trigger a break ;
    this is more )
  else e

;;
f
  ( if loooooooooooooooooooooooooooooooooooooooooooooooooooooooooong then ()
  else () )

;;
f
  ( if loooooooooooooooooooooooooooooooooooooooooooooooooooooooooonger then
    ()
  else () )

;;
f
  ( if even loooooooooooooooooooooooooooooooooooooooooooooooooooooooooonger
  then ()
  else () )

;;
f
  ( if
    and_ even
      loooooooooooooooooooooooooooooooooooooooooooooooooooooooooonger
  then ()
  else () )

let () =
  f
    (if a___________________________________________________________________
    then b_________________________________________________________________
    else c_________________________________________________________________)

let () = if [@test] true then () else if [@other] true then ()

let foo = if cond1 then arm1 else if cond2 then arm2 else arm3

let _ =
  if condition then
    let a = 1 in
    let b = 2 in
    a + b
  else if other_condition then 12
  else 0

let _ =
  if foo then
    let a = 1 in
    let b = 2 in
    a + b
  else if foo then 12
  else 0

let foo =
  if is_sugared_list e2 then Some (Semi, Non)
  else Some (ColonColon, if exp == e2 then Right else Left)

let foo =
  if is_sugared_list e2 then Some (Semi, Non)
  else
    Some
      ( ColonColon
      , if exp == e2 then Right
        else (Left foooooo, foooo, fooo, foooooo, fooooooo, foooooooo) )

let foo =
  if cond1 then (
    arm1 ;
    foooooooooooooo ;
    fooooooooooooooooooo fooooooooooooooo foooooooooooo ;
    List.foo ~fooooooo:foooooooooooooooo ~foo:(fun fooooooooo ->
        fooooooooooooo) )
  else if cond2 then (
    arm2 ;
    foooooooooooooo ;
    fooooooooooooooooooo fooooooooooooooo foooooooooooo ;
    List.foo ~fooooooo:foooooooooooooooo ~foo:(fun fooooooooo ->
        fooooooooooooo) )
  else (
    arm3 ;
    foooooooooooooo ;
    fooooooooooooooooooo fooooooooooooooo foooooooooooo ;
    List.foo ~fooooooo:foooooooooooooooo ~foo:(fun fooooooooo ->
        fooooooooooooo) )

let foo =
  if some condition then
    if some nested condition then some action else some other action
  else some default action

let foo =
  if some condition then
    if some nested condition then
      some action + foooo + foooo + foooooooo + foooo + foooooo
    else some other action
  else some default action

let foo = if cmp < 0 then (* foo *) a + b else (* foo *) a - b

let foo =
  if cmp < 0 then (* ast higher precedence than context: no parens *)
    false
  else if cmp > 0 then (* context higher prec than ast: add parens *)
    true
  else if Poly.(assoc_of_prec prec_ast = which_child && which_child <> Non)
  then foo

let _ =
  if fooo then ( + )
  else if bar then ( * )
  else if foobar then ( / )
  else ( - )
